Importo librerías

library(tidyverse)
library(sf)
library(ggplot2)
library(scales)
library(ggmap)

Levanto base escuelas

escuelas <- read_csv('data/establecimientos_educativos_WGS84.csv')
summary(escuelas)
##       cui            cueanexo             cue             anexo       
##  Min.   :200001   Min.   :20000100   Min.   :200001   Min.   : 0.000  
##  1st Qu.:200455   1st Qu.:20084300   1st Qu.:200843   1st Qu.: 0.000  
##  Median :200901   Median :20159822   Median :201598   Median : 0.000  
##  Mean   :201110   Mean   :20184427   Mean   :201844   Mean   : 3.253  
##  3rd Qu.:201716   3rd Qu.:20240100   3rd Qu.:202401   3rd Qu.: 0.000  
##  Max.   :202731   Max.   :29003001   Max.   :290030   Max.   :99.000  
##      sector       dom_edific         dom_establ         nombre_est       
##  Min.   :1.000   Length:2973        Length:2973        Length:2973       
##  1st Qu.:1.000   Class :character   Class :character   Class :character  
##  Median :1.000   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :1.363                                                           
##  3rd Qu.:2.000                                                           
##  Max.   :2.000                                                           
##   nombre_abr          telefono            email             codpost         
##  Length:2973        Length:2973        Length:2973        Length:2973       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##   web_megcba           nivmod           nivelmodal         tipest_abr       
##  Length:2973        Length:2973        Length:2973        Length:2973       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##     tipest             depfun           depfun_otr              de        
##  Length:2973        Length:2973        Length:2973        Min.   : 1.000  
##  Class :character   Class :character   Class :character   1st Qu.: 4.000  
##  Mode  :character   Mode  :character   Mode  :character   Median : 9.000  
##                                                           Mean   : 9.637  
##                                                           3rd Qu.:15.000  
##                                                           Max.   :21.000  
##      comuna          barrio           area_progr            estado     
##  Min.   : 1.000   Length:2973        Length:2973        Min.   :1.000  
##  1st Qu.: 4.000   Class :character   Class :character   1st Qu.:1.000  
##  Median : 8.000   Mode  :character   Mode  :character   Median :1.000  
##  Mean   : 7.654                                         Mean   :1.155  
##  3rd Qu.:11.000                                         3rd Qu.:1.000  
##  Max.   :15.000                                         Max.   :4.000  
##     point_x          point_y          nivel          
##  Min.   : 93958   Min.   : 92910   Length:2973       
##  1st Qu.: 98888   1st Qu.: 99347   Class :character  
##  Median :101998   Median :101691   Mode  :character  
##  Mean   :102033   Mean   :101708                     
##  3rd Qu.:105320   3rd Qu.:104019                     
##  Max.   :110324   Max.   :110326

Veo dimensión de la base

dim(escuelas)
## [1] 2973   27

2973 registros, 27 columnas.

Veo columnas de la base escuelas

colnames(escuelas)
##  [1] "cui"        "cueanexo"   "cue"        "anexo"      "sector"    
##  [6] "dom_edific" "dom_establ" "nombre_est" "nombre_abr" "telefono"  
## [11] "email"      "codpost"    "web_megcba" "nivmod"     "nivelmodal"
## [16] "tipest_abr" "tipest"     "depfun"     "depfun_otr" "de"        
## [21] "comuna"     "barrio"     "area_progr" "estado"     "point_x"   
## [26] "point_y"    "nivel"

Selecciono columnas

Dejo las columnas con las que me voy a quedar

escuelas <- escuelas %>% 
  select(cue,nombre_abr,depfun,de,comuna,barrio)

Inspecciono campos

summary(escuelas)
##       cue          nombre_abr           depfun                de        
##  Min.   :200001   Length:2973        Length:2973        Min.   : 1.000  
##  1st Qu.:200843   Class :character   Class :character   1st Qu.: 4.000  
##  Median :201598   Mode  :character   Mode  :character   Median : 9.000  
##  Mean   :201844                                         Mean   : 9.637  
##  3rd Qu.:202401                                         3rd Qu.:15.000  
##  Max.   :290030                                         Max.   :21.000  
##      comuna          barrio         
##  Min.   : 1.000   Length:2973       
##  1st Qu.: 4.000   Class :character  
##  Median : 8.000   Mode  :character  
##  Mean   : 7.654                     
##  3rd Qu.:11.000                     
##  Max.   :15.000

Cantidad de escuelas por dependencia funcional

table(escuelas$depfun)
## 
##                                               Dirección de Educación Artística 
##                                                                             57 
##                            Dirección de Educación del Adulto y del Adolescente 
##                                                                            367 
##                                                Dirección de Educación Especial 
##                                                                             54 
##                                                 Dirección de Educación Inicial 
##                                                                            432 
##                                                   Dirección de Educación Media 
##                                                                            106 
##                                                Dirección de Educación Primaria 
##                                                                            503 
##                                                 Dirección de Educación Técnica 
##                                                                             39 
##                                        Dirección de Educación Técnica Superior 
##                                                                              2 
##                                         Dirección de EducaciónTécnica Superior 
##                                                                             38 
##                                      Dirección de Escuelas Normales Superiores 
##                                                                             22 
##                              Dirección General de Educación de Gestión Privada 
##                                                                           1055 
##                                          Dirección General Escuela de Maestros 
##                                                                              5 
##                             Gerencia Operativa de Educación para el Desarrollo 
##                                                                             53 
##                                    Gerencia Operativa de Formación Profesional 
##                                                                            113 
## Gerencia Operativa Gestión y Administración de Institutos de Formación Docente 
##                                                                              6 
##                                                        GO de Formación Laboral 
##                                                                              1 
##                   Subsecretaría de Coordinación Pedagógica y Equidad Educativa 
##                                                                             86

Filtrando elementos

Voy a quitar las dependencias funcionales con menos de 10 establecimientos

Para ello tengo que agrupar y contar.

Luego ordeno por dependencia funcional en orden descendente.

escuelas_agrup_depfun <- escuelas %>% 
  group_by(depfun) %>% 
  summarise(cantidad = n()) %>% 
  arrange(-cantidad)

print(escuelas_agrup_depfun)
## # A tibble: 18 × 2
##    depfun                                                               cantidad
##    <chr>                                                                   <int>
##  1 Dirección General de Educación de Gestión Privada                        1055
##  2 Dirección de Educación Primaria                                           503
##  3 Dirección de Educación Inicial                                            432
##  4 Dirección de Educación del Adulto y del Adolescente                       367
##  5 Gerencia Operativa de Formación Profesional                               113
##  6 Dirección de Educación Media                                              106
##  7 Subsecretaría de Coordinación Pedagógica y Equidad Educativa               86
##  8 Dirección de Educación Artística                                           57
##  9 Dirección de Educación Especial                                            54
## 10 Gerencia Operativa de Educación para el Desarrollo                         53
## 11 Dirección de Educación Técnica                                             39
## 12 Dirección de EducaciónTécnica Superior                                     38
## 13 <NA>                                                                       34
## 14 Dirección de Escuelas Normales Superiores                                  22
## 15 Gerencia Operativa Gestión y Administración de Institutos de Formac…        6
## 16 Dirección General Escuela de Maestros                                       5
## 17 Dirección de Educación Técnica Superior                                     2
## 18 GO de Formación Laboral                                                     1

Me quedo con las dependencias funcionales con menos de 10 establecimientos

dep_funcs_chicas <- escuelas_agrup_depfun %>% 
  filter(cantidad < 10)

print(dep_funcs_chicas)
## # A tibble: 4 × 2
##   depfun                                                                cantidad
##   <chr>                                                                    <int>
## 1 Gerencia Operativa Gestión y Administración de Institutos de Formaci…        6
## 2 Dirección General Escuela de Maestros                                        5
## 3 Dirección de Educación Técnica Superior                                      2
## 4 GO de Formación Laboral                                                      1

Quiero eliminar de la base escuelas las que corresponden a estas dependencias funcionales.

Para ello construyo una lista de las dependencias funcionales chicas

lista_dep_funcs_chicas <- dep_funcs_chicas$depfun

lista_dep_funcs_chicas
## [1] "Gerencia Operativa Gestión y Administración de Institutos de Formación Docente"
## [2] "Dirección General Escuela de Maestros"                                         
## [3] "Dirección de Educación Técnica Superior"                                       
## [4] "GO de Formación Laboral"

Ahora quito de la base esas escuelas

escuelas <- escuelas %>% 
  filter(!(depfun %in% lista_dep_funcs_chicas))

Chequeo que ya no estén.

table(escuelas$depfun)
## 
##                             Dirección de Educación Artística 
##                                                           57 
##          Dirección de Educación del Adulto y del Adolescente 
##                                                          367 
##                              Dirección de Educación Especial 
##                                                           54 
##                               Dirección de Educación Inicial 
##                                                          432 
##                                 Dirección de Educación Media 
##                                                          106 
##                              Dirección de Educación Primaria 
##                                                          503 
##                               Dirección de Educación Técnica 
##                                                           39 
##                       Dirección de EducaciónTécnica Superior 
##                                                           38 
##                    Dirección de Escuelas Normales Superiores 
##                                                           22 
##            Dirección General de Educación de Gestión Privada 
##                                                         1055 
##           Gerencia Operativa de Educación para el Desarrollo 
##                                                           53 
##                  Gerencia Operativa de Formación Profesional 
##                                                          113 
## Subsecretaría de Coordinación Pedagógica y Equidad Educativa 
##                                                           86

Veo que todas son mayores a 10.

Chequeo si hay y elimino valores nulos

any(is.na(escuelas$depfun))
## [1] TRUE
escuelas <- drop_na(escuelas)

Grafico cantidad de escuelas por dependencia funcional

ggplot(escuelas, aes(y = factor(depfun)))+
  geom_bar(fill = "steelblue", color = "black", stat = "count") +
  labs(title = "Establecimientos por Dependencia Funcional", y = "Dependencia funcional", x = "Cantidad")

Quito todo lo que sea gerencias

Y me quedo solo con las que contienen la palabra “Dirección”

escuelas_direcciones <- escuelas %>% 
  filter(grepl("Dirección",depfun))

table(escuelas_direcciones$depfun)
## 
##                    Dirección de Educación Artística 
##                                                  57 
## Dirección de Educación del Adulto y del Adolescente 
##                                                 367 
##                     Dirección de Educación Especial 
##                                                  54 
##                      Dirección de Educación Inicial 
##                                                 432 
##                        Dirección de Educación Media 
##                                                 106 
##                     Dirección de Educación Primaria 
##                                                 503 
##                      Dirección de Educación Técnica 
##                                                  39 
##              Dirección de EducaciónTécnica Superior 
##                                                  38 
##           Dirección de Escuelas Normales Superiores 
##                                                  22 
##   Dirección General de Educación de Gestión Privada 
##                                                1055

Gráficos de tortas

Para conocer las proporciones de escuelas por Dirección.

Separo las de gestión privada y las de gestión estatal

escuelas_estatales_privadas <- escuelas_direcciones %>% 
  mutate(est_priv = case_when(depfun == "Dirección General de Educación de Gestión Privada" ~ 'Privadas',
                              .default = 'Estatales')) %>%
  group_by(est_priv) %>%
  summarise(cantidad = n()) %>%
  arrange(cantidad) %>% 
  mutate (pct = round((cantidad / sum(cantidad))*100,digits=2),
          lab.ypos = cumsum(pct) - 0.5*pct) #Esto es para acomodar etiquetas de pct

escuelas_estatales_privadas
## # A tibble: 2 × 4
##   est_priv  cantidad   pct lab.ypos
##   <chr>        <int> <dbl>    <dbl>
## 1 Privadas      1055  39.5     19.7
## 2 Estatales     1618  60.5     69.7
ggplot(escuelas_estatales_privadas, aes(x = "", y=pct, fill = est_priv))+
  geom_bar(width=1, stat = 'identity', color = 'white')+
  coord_polar('y',start=0)+
  geom_text(aes(y=lab.ypos, label = percent(pct, scale = 1, accuracy = 0.01)), color='white')+
  theme_void()+
  labs(title = "Porcentaje de establecimientos de gestión Estatal/Privada", fill = "Estatales/Privados")

Eliminando las de gestion privada

Me quedo sólo con las de gestión estatal para calcular porcentajes entre primarias, iniciales, medias, etc.

escuelas_estatales <- escuelas_direcciones %>% 
  filter(depfun != "Dirección General de Educación de Gestión Privada") %>% 
  group_by(depfun) %>% 
  summarise(cantidad = n()) %>% 
  arrange(cantidad) %>% 
  mutate (pct = round((cantidad / sum(cantidad))*100,digits=2),
          lab.ypos = cumsum(pct) - 0.5*pct) #Esto es para acomodar etiquetas de pct

escuelas_estatales
## # A tibble: 9 × 4
##   depfun                                              cantidad   pct lab.ypos
##   <chr>                                                  <int> <dbl>    <dbl>
## 1 Dirección de Escuelas Normales Superiores                 22  1.36     0.68
## 2 Dirección de EducaciónTécnica Superior                    38  2.35     2.54
## 3 Dirección de Educación Técnica                            39  2.41     4.92
## 4 Dirección de Educación Especial                           54  3.34     7.79
## 5 Dirección de Educación Artística                          57  3.52    11.2 
## 6 Dirección de Educación Media                             106  6.55    16.3 
## 7 Dirección de Educación del Adulto y del Adolescente      367 22.7     30.9 
## 8 Dirección de Educación Inicial                           432 26.7     55.6 
## 9 Dirección de Educación Primaria                          503 31.1     84.5

Voy a dejar en la categoría “Otra” a las dependencias funcionales con menos de 100 escuelas.

escuelas_estatales <- escuelas_direcciones %>% 
  filter(depfun != "Dirección General de Educación de Gestión Privada") %>% 
  mutate(depfun = case_when(depfun == 'Dirección de Escuelas Normales Superiores' ~ 'Otra DF',
                            depfun == 'Dirección de EducaciónTécnica Superior' ~ 'Otra DF',
                            depfun == 'Dirección de Educación Técnica' ~ 'Otra DF',
                            depfun == 'Dirección de Educación Especial' ~ 'Otra DF',
                            depfun == 'Dirección de Educación Artística' ~ 'Otra DF',
                            .default = depfun)) %>% 
  group_by(depfun) %>% 
  summarise(cantidad = n()) %>% 
  arrange(cantidad) %>% 
  mutate (pct = round((cantidad / sum(cantidad))*100,digits=2)) %>% 
  mutate (lab.ypos = cumsum(pct) - 0.5*pct)  %>%  #Esto es para acomodar etiquetas de pct+
  mutate(legend_labs = paste0(depfun, " (",pct, "%)"))


escuelas_estatales
## # A tibble: 5 × 5
##   depfun                                     cantidad   pct lab.ypos legend_labs
##   <chr>                                         <int> <dbl>    <dbl> <chr>      
## 1 Dirección de Educación Media                    106  6.55     3.28 Dirección …
## 2 Otra DF                                         210 13.0     13.0  Otra DF (1…
## 3 Dirección de Educación del Adulto y del A…      367 22.7     30.9  Dirección …
## 4 Dirección de Educación Inicial                  432 26.7     55.6  Dirección …
## 5 Dirección de Educación Primaria                 503 31.1     84.5  Dirección …
ggplot(escuelas_estatales, aes(x = 2, y = pct, fill = legend_labs)) +
  geom_bar(stat = "identity", color = "white") +
  coord_polar(theta = "y", start = 0, direction = -1)+
  geom_text(aes(label = percent(pct, scale = 1, accuracy = 0.01) ), size=3, position=position_stack(vjust=0.5))+
  theme_void()+
  xlim(0.5, 2.5)+
  labs(title = "Porcentaje de establecimientos de gestión Estatal por Dependencia Funcional", fill = "Dependencia Funcional")

Mapa de escuelas en CABA

Voy a graficar con puntos la distribución de las escuelas en CABA.

Levanto el dataset de establecimientos educativos (ahora desde el geojson) para tener las coordenadas.

Además, levanto el geojson de las comunas de CABA.

escuelas_caba <- st_read("data/establecimientos_educativos_WGS84.geojson",
                        stringsAsFactors = TRUE, #Carga strings como categorías
                        options = "ENCODING=latin1")
## options:        ENCODING=latin1 
## Reading layer `establecimientos_educativos_WGS84' from data source 
##   `/home/maxi/Escritorio/PosgradoFlacso/Proyectos/EstablecimientosEducativos/R-ProyectoCsDatos2/data/establecimientos_educativos_WGS84.geojson' 
##   using driver `GeoJSON'
## Simple feature collection with 2973 features and 27 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: -58.52918 ymin: -34.69318 xmax: -58.35072 ymax: -34.53619
## Geodetic CRS:  WGS 84
comunas_caba <- st_read("data/comunas_caba.geojson",
                        stringsAsFactors = TRUE, #Carga strings como categorías
                        options = "ENCODING=latin1")
## options:        ENCODING=latin1 
## Reading layer `comunas' from data source 
##   `/home/maxi/Escritorio/PosgradoFlacso/Proyectos/EstablecimientosEducativos/R-ProyectoCsDatos2/data/comunas_caba.geojson' 
##   using driver `GeoJSON'
## Simple feature collection with 15 features and 6 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -58.53152 ymin: -34.70529 xmax: -58.33515 ymax: -34.52649
## Geodetic CRS:  WGS 84
comunas_caba <- comunas_caba %>% 
  mutate(comuna = COMUNAS)

dim(comunas_caba)
## [1] 15  8

Me quedo sólo con las correspondientes a alguna Dirección (quito gerencias)

escuelas_caba <- escuelas_caba %>% 
  filter(grepl("Dirección",depfun))
ggplot()+
  geom_sf(data=comunas_caba)+
  geom_sf(data=escuelas_caba, aes(color=depfun), alpha=0.3)+
  labs(color="Dependencia Funcional")+
  theme_minimal()+
  labs(title="Escuelas en CABA por Dependencia Funcional")

Cantidad de escuelas por Comuna

cant_escuelas_comunas <- escuelas_direcciones %>% 
  group_by(comuna) %>% 
  summarise(cantidad = n()) %>% 
  select(comuna,cantidad)

Al dataset de comunas le uno el de cantidad de escuelas

comunas_caba <- left_join(comunas_caba,cant_escuelas_comunas, by="comuna")

Gráfico de barras de escuelas por comunas

ggplot(data = comunas_caba,
       aes(x = factor(comuna), y = cantidad, fill=cantidad))+ 
  geom_col(colour = 'black',
           alpha = 0.7)+
  scale_fill_gradient(low = "#e5f5e0", high = "#31a354")+
  labs (title = "Cantidad de escuelas por Comuna",
        x = "Comunas",
        y = "Cantidad de escuelas")+
  geom_text(aes(label = cantidad), hjust = -0.1)+ # Muestra los números sobre las barras
  theme_minimal()+
  coord_flip() #Roto el gráfico para que quede horizontal

Mapa coroplético con la cantidad de escuelas por comuna

ggplot()+
  geom_sf(data=comunas_caba, aes(fill=cantidad))+
    scale_fill_distiller(palette = "RdYlGn", direction = 1)+ #El direction 1 da vuelta la paleta de colores
      labs(title="Cantidad de escuelas por Comuna",
       fill="")

Ubicación de las escuelas de gestión Privada/Estatal

escuelas_estatales_privadas <- escuelas_caba %>% 
  mutate(est_priv = case_when(depfun == "Dirección General de Educación de Gestión Privada" ~ 'Privada',
                              .default = 'Estatal'))

Agregando un mapa de contexto

bbox_caba <- st_bbox(comunas_caba)
print(bbox_caba)
##      xmin      ymin      xmax      ymax 
## -58.53152 -34.70529 -58.33515 -34.52649
#Paso a numéricos el bbox
bbox_caba <- as.numeric(bbox_caba)
mapa_caba <- get_stamenmap(bbox = as.numeric(bbox_caba), #Repito pero no hace falta
                           maptype = "terrain", #Estilo de mapa
                           zoom=13)
ggmap(mapa_caba)+
  geom_sf(data=comunas_caba, inherit.aes=FALSE)+
  geom_sf(data=escuelas_estatales_privadas, aes(color=est_priv),inherit.aes=FALSE, alpha=0.3)+
  labs(color="Gestión")+
  theme_minimal()+
  labs(title="Escuelas en CABA según gestión Estatal/Privada")

Voy a facetar el mapa según escuelas de gestión Estatal o Privada para verlo con más claridad

ggmap(mapa_caba)+
  geom_sf(data=comunas_caba, inherit.aes=FALSE)+
  geom_sf(data=escuelas_estatales_privadas, aes(x = st_coordinates(geometry)[,1], y = st_coordinates(geometry)[,2]), inherit.aes=FALSE)+
  facet_wrap(~est_priv)

Escuelas privadas por comuna

Filtro para quedarme con sólo las escuelas con dependencia funcional “Dirección General de Educación de Gestión Privada”

escuelas_privadas_por_comuna <- escuelas %>% 
  filter(depfun == "Dirección General de Educación de Gestión Privada") %>% 
  group_by(comuna) %>%
  summarise(cantidad = n()) %>% 
  arrange(-cantidad)

escuelas_privadas_por_comuna
## # A tibble: 15 × 2
##    comuna cantidad
##     <dbl>    <int>
##  1     13      120
##  2      1      113
##  3      3       84
##  4     14       84
##  5      5       81
##  6      6       76
##  7      2       73
##  8     12       71
##  9      7       65
## 10     11       63
## 11     15       63
## 12      4       52
## 13     10       44
## 14      9       35
## 15      8       31
ggplot(data = escuelas_privadas_por_comuna,
       aes(x = factor(comuna), y = cantidad, fill=cantidad))+ 
  geom_col(colour = 'black',
           alpha = 0.7)+
  scale_fill_gradient(low = "#e5f5e0", high = "#31a354")+
  labs (title = "Cantidad de escuelas privadas por Comuna",
        x = "Comunas",
        y = "Cantidad de escuelas")+
  geom_text(aes(label = cantidad), hjust = -0.1)+ # Muestra los números sobre las barras
  theme_minimal()+
  coord_flip() #Roto el gráfico para que quede horizontal

Mapa coroplético de escuelas privadas por comuna

A comunas_caba le tengo que joinear el escuelas_privadas_por_comuna

comunas_caba <- st_read("data/comunas_caba.geojson",
                        stringsAsFactors = TRUE, #Carga strings como categorías
                        options = "ENCODING=latin1")
## options:        ENCODING=latin1
## Warning in CPL_read_ogr(dsn, layer, query, as.character(options), quiet, : GDAL
## Message 6: driver GeoJSON does not support open option ENCODING
## Reading layer `comunas' from data source 
##   `/home/maxi/Escritorio/PosgradoFlacso/Proyectos/EstablecimientosEducativos/R-ProyectoCsDatos2/data/comunas_caba.geojson' 
##   using driver `GeoJSON'
## Simple feature collection with 15 features and 6 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -58.53152 ymin: -34.70529 xmax: -58.33515 ymax: -34.52649
## Geodetic CRS:  WGS 84
comunas_caba <- comunas_caba %>% 
  mutate(comuna = COMUNAS)

escuelas_privadas_por_comuna <- left_join(comunas_caba,escuelas_privadas_por_comuna, by="comuna")
ggplot()+
  geom_sf(data=escuelas_privadas_por_comuna, aes(fill=cantidad))+
    scale_fill_distiller(palette = "RdYlGn", direction = 1)+ 
      labs(title="Cantidad de escuelas privadas por Comuna",
       fill="")

Escuelas según cantidad de población

Levanto base censo 2010

censo_2010 <- read.csv('data/partidos_censo2010.csv')

summary(censo_2010)
##      codigo        nombre             pob_2010          viv_2010     
##  Min.   :2001   Length:48          Min.   :  56729   Min.   : 19287  
##  1st Qu.:2013   Class :character   1st Qu.: 174013   1st Qu.: 64864  
##  Median :6319   Mode  :character   Median : 223280   Median : 93388  
##  Mean   :5075                      Mean   : 301108   Mean   :104104  
##  3rd Qu.:6544                      3rd Qu.: 340722   3rd Qu.:123359  
##  Max.   :6861                      Max.   :1775816   Max.   :447306  
##     hog_2010     
##  Min.   : 17116  
##  1st Qu.: 59537  
##  Median : 81055  
##  Mean   : 95612  
##  3rd Qu.:109566  
##  Max.   :484909

Chequeo nombres de columnas

colnames(censo_2010)
## [1] "codigo"   "nombre"   "pob_2010" "viv_2010" "hog_2010"

Veo qué valores tiene la columna nombre

table(censo_2010$nombre)
## 
##       Almirante Brown            Avellaneda           Berazategui 
##                     1                     1                     1 
##               Berisso              Comuna 1             Comuna 10 
##                     1                     1                     1 
##             Comuna 11             Comuna 12             Comuna 13 
##                     1                     1                     1 
##             Comuna 14             Comuna 15              Comuna 2 
##                     1                     1                     1 
##              Comuna 3              Comuna 4              Comuna 5 
##                     1                     1                     1 
##              Comuna 6              Comuna 7              Comuna 8 
##                     1                     1                     1 
##              Comuna 9              Ensenada               Escobar 
##                     1                     1                     1 
## Esteban Echeverr\xeda                Ezeiza      Florencio Varela 
##                     1                     1                     1 
##  General Rodr\xedguez General San Mart\xedn            Hurlingham 
##                     1                     1                     1 
##          Ituzaing\xf3        Jos\xe9 C. Paz            La Matanza 
##                     1                     1                     1 
##              La Plata              Lan\xfas       Lomas de Zamora 
##                     1                     1                     1 
##              Luj\xe1n   Malvinas Argentinas                 Merlo 
##                     1                     1                     1 
##                Moreno              Mor\xf3n                 Pilar 
##                     1                     1                     1 
##   Presidente Per\xf3n               Quilmes          San Fernando 
##                     1                     1                     1 
##            San Isidro            San Miguel           San Vicente 
##                     1                     1                     1 
##                 Tigre       Tres de Febrero      Vicente L\xf3pez 
##                     1                     1                     1

Filtro solo los datos de CABA

Para ello voy a seleccionar sólo las que contienen la palabra “Comuna”

censo_2010_CABA <- censo_2010 %>% 
  filter(str_detect(nombre, "Comuna"))

Genero una columna Comuna

En la misma sólo voy a poner el número de la comuna para poder joinear

Tengo que castear a double porque sino queda como character

censo_2010_CABA_comunas <- censo_2010_CABA %>% 
  mutate(comuna = as.double(str_remove(nombre, "Comuna ")))

Joineo censo con base de escuelas

comunas_caba <- left_join(comunas_caba, censo_2010_CABA_comunas, by="comuna")
comunas_caba <- left_join(comunas_caba, cant_escuelas_comunas, by="comuna")

Calculo escuelas por cantidad de poblacion

En base a los datos del censo de 2010, por cada 1000 habitantes y cada 1000 viviendas.

escuelas_poblacion <- comunas_caba %>% 
  mutate(escuelas_por_1000_hab = cantidad/(pob_2010/1000),
         escuelas_por_1000_viv = cantidad/(viv_2010/1000)) %>% 
  arrange(-escuelas_por_1000_hab)

Gráfico de escuelas por cada 1000 habitantes por Comuna

escuelas_poblacion <- escuelas_poblacion %>% 
  arrange(comuna)

ggplot(escuelas_poblacion, aes(x = escuelas_por_1000_hab, y = reorder(nombre,comuna))) +
  geom_bar(stat = "identity", fill = "steelblue") +
  labs(x = "Escuelas por cada 1000 habitantes", y = "Comuna") +
  ggtitle("Escuelas por cada 1000 habitantes por Comuna")

Cantidad de escuelas privadas por cada 1000 habitantes por Comuna

escuelas_priv_agrup_comuna_censo <-
  left_join(escuelas_privadas_por_comuna,censo_2010_CABA_comunas,by="comuna") %>%
  mutate(escuelas_por_1000_hab = cantidad/(pob_2010/1000)) %>% 
  arrange(-escuelas_por_1000_hab)
ggplot(escuelas_priv_agrup_comuna_censo, aes(y = reorder(nombre,comuna))) +
  geom_bar(aes(x = escuelas_por_1000_hab), stat = "identity", position = "dodge") +
  labs(x = "Cantidad de escuelas privadas por cada 1000 habitantes", y = "Comunas") +
  ggtitle("Cantidad de escuelas privadas por habitantes por Comuna")

Comparación de cantidad de escuelas por cada 1000 habitantes

Voy a generar un facetado para ver en dos mapas coropléticos la relación entre cantidad de escuelas de gestión estatal y de gestión privada por comuna.

Para ello tengo que generar un dataset que contenga, por cada comuna, la cantidad de escuelas privadas y la cantidad de escuelas estatales por cada 1000 habitantes.

Tengo los datos:

cant_escuelas_est_priv_comunas <- escuelas_estatales_privadas %>% 
  group_by(comuna,est_priv) %>% 
  summarise(cantidad = n())

A esto le tengo que joinear la base de censo_2010 para luego calcular la relación

cant_escuelas_est_priv_comunas <- left_join(cant_escuelas_est_priv_comunas,
                                            censo_2010_CABA_comunas,
                                            by="comuna")

Ahora le agrego una columna para calcular la relación entre cantidad de escuelas y cantidad de habitantes

cant_escuelas_est_priv_comunas <- cant_escuelas_est_priv_comunas %>% 
  mutate(escuelas_por_1000_hab = cantidad/(pob_2010/1000))

Levanto y joineo el mapa de comunas_caba para poder graficar el coroplético

comunas_caba <- st_read("data/comunas_caba.geojson",
                        stringsAsFactors = TRUE, #Carga strings como categorías
                        options = "ENCODING=latin1") %>% 
  mutate(comuna = COMUNAS)
## options:        ENCODING=latin1 
## Reading layer `comunas' from data source 
##   `/home/maxi/Escritorio/PosgradoFlacso/Proyectos/EstablecimientosEducativos/R-ProyectoCsDatos2/data/comunas_caba.geojson' 
##   using driver `GeoJSON'
## Simple feature collection with 15 features and 6 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -58.53152 ymin: -34.70529 xmax: -58.33515 ymax: -34.52649
## Geodetic CRS:  WGS 84
cant_escuelas_est_priv_comunas <- st_join(comunas_caba, cant_escuelas_est_priv_comunas)

Grafico mapa coroplético facetado por estatales y privadas

ggplot()+
   geom_sf(data=cant_escuelas_est_priv_comunas, aes(fill=escuelas_por_1000_hab))+
   scale_fill_distiller(palette = "RdYlGn", direction = 1)+
  facet_wrap(~est_priv)+
  labs(title= "Cantidad de escuelas de gestión Estatal/Privada",
       subtitle = "Por cada 1000 habitantes por Comuna",
       fill="")